#ifndef __GLOBAL_VARIABLE_H
#define __GLOBAL_VARIABLE_H
#include <stdint.h>
#include <stdbool.h>


/* Bool类 */
typedef enum
{
    GV_BOOL_TEST = 0,
    /* 在下方添加需要的索引 */

    /* 在上方添加需要的索引 */
    GV_BOOL_QTY,
} gvBoolIdx_t;


/* Uint8类 */
typedef enum
{
    GV_UINT8_TEST = 0,
    /* 在下方添加需要的索引 */
    GV_UINT8_OVER_TEMPERATURE,
    GV_UINT8_HIGH_TEMP_DERATE,
    GV_UINT8_OIL_TEMP,
    GV_UINT8_OIL_PRES,
    GV_UINT8_OIL_POS,
    GV_UINT8_LOAD_BRK,
    GV_UINT8_SMOKE,
    GV_UINT8_DOOR,
    GV_UINT8_3L_OV_A,
    GV_UINT8_3L_UV_A,
    GV_UINT8_3L_OV_B,
    GV_UINT8_3L_UV_B,
    GV_UINT8_3L_OV_C,
    GV_UINT8_3L_UV_C,
    GV_UINT8_CUR_ZERO_AC_A,
    GV_UINT8_CUR_ZERO_AC_B,
    GV_UINT8_CUR_ZERO_AC_C,
    GV_UINT8_CUR_ZERO_DC,
    GV_UINT8_3L_OF,
    GV_UINT8_3L_UF,
    GV_UINT8_OVER_LEAK_CUR,
    /* 在上方添加需要的索引 */
    GV_UINT8_QTY,
} gvUint8Idx_t;


/* Int8类 */
typedef enum
{
    GV_INT8_TEST = 0,
    /* 在下方添加需要的索引 */
    
    /* 在上方添加需要的索引 */
    GV_INT8_QTY,
} gvInt8Idx_t;


/* Uint16类 */
typedef enum
{
    GV_UINT16_TEST = 0,
    /* 在下方添加需要的索引 */
    GV_UINT16_PREVONOFFCOMMANDER,
    /* 在上方添加需要的索引 */
    GV_UINT16_QTY,
} gvUint16Idx_t;


/* Int16类 */
typedef enum
{
    GV_INT16_TEST = 0,
    /* 在下方添加需要的索引 */
    
    /* 在上方添加需要的索引 */
    GV_INT16_QTY,
} gvInt16Idx_t;


/* Uint32类 */
typedef enum
{
    GV_UINT32_TEST = 0,
    /* 在下方添加需要的索引 */
    
    /* 在上方添加需要的索引 */
    GV_UINT32_QTY,
} gvUint32Idx_t;


/* Int32类 */
typedef enum
{
    GV_INT32_TEST = 0,
    /* 在下方添加需要的索引 */
    GV_INT32_LC_IN_STATE,
    GV_INT32_LC_IN_FAULT,
    GV_INT32_LC_OIL_TEMP,
    GV_INT32_FAN1_TEST,
    GV_INT32_FAN2_TEST,
    /* 在上方添加需要的索引 */
    GV_INT32_QTY,
} gvInt32Idx_t;


/* Float类 */
typedef enum
{
    GV_FLOAT_TEST = 0,
    /* 在下方添加需要的索引 */
    
    /* 在上方添加需要的索引 */
    GV_FLOAT_QTY,
} gvFloatIdx_t;


/* Double类 */
typedef enum
{
    GV_DOUBLE_TEST = 0,
    /* 在下方添加需要的索引 */
    
    /* 在上方添加需要的索引 */
    GV_DOUBLE_QTY,
} gvDoubleIdx_t;


typedef enum
{
    GV_ERR_NONE  = 0,
    GV_ERR_PARAM = 1,
} gvErr_t;


/**
 * @brief 获取Bool全局变量
 * @param idx    - 索引 参考<gvBoolIdx_t>
 * @param pValue - 存放获取值的变量指针
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_GetBool(gvBoolIdx_t idx, bool *pValue);


/**
 * @brief 获取Uint8全局变量
 * @param idx    - 索引 参考<gvUint8Idx_t>
 * @param pValue - 存放获取值的变量指针
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_GetUint8(gvUint8Idx_t idx, uint8_t *pValue);


/**
 * @brief 获取Int8全局变量
 * @param idx    - 索引 参考<gvInt8Idx_t>
 * @param pValue - 存放获取值的变量指针
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_GetInt8(gvInt8Idx_t idx, int8_t *pValue);


/**
 * @brief 获取Uint16全局变量
 * @param idx    - 索引 参考<gvUint16Idx_t>
 * @param pValue - 存放获取值的变量指针
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_GetUint16(gvUint16Idx_t idx, uint16_t *pValue);


/**
 * @brief 获取Int16全局变量
 * @param idx    - 索引 参考<gvInt16Idx_t>
 * @param pValue - 存放获取值的变量指针
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_GetInt16(gvInt16Idx_t idx, int16_t *pValue);


/**
 * @brief 获取Uint32全局变量
 * @param idx    - 索引 参考<gvUint32Idx_t>
 * @param pValue - 存放获取值的变量指针
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_GetUint32(gvUint32Idx_t idx, uint32_t *pValue);


/**
 * @brief 获取Int32全局变量
 * @param idx    - 索引 参考<gvInt32Idx_t>
 * @param pValue - 存放获取值的变量指针
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_GetInt32(gvInt32Idx_t idx, int32_t *pValue);


/**
 * @brief 获取Float全局变量
 * @param idx    - 索引 参考<gvFloatIdx_t>
 * @param pValue - 存放获取值的变量指针
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_GetFloat(gvFloatIdx_t idx, float *pValue);


/**
 * @brief 获取Double全局变量
 * @param idx    - 索引 参考<gvDoubleIdx_t>
 * @param pValue - 存放获取值的变量指针
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_GetDouble(gvDoubleIdx_t idx, double *pValue);


/**
 * @brief 设置Bool全局变量
 * @param idx   - 索引 参考<gvBoolIdx_t>
 * @param value - 设置值
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_SetBool(gvBoolIdx_t idx, bool value);


/**
 * @brief 设置Uint8全局变量
 * @param idx   - 索引 参考<gvUint8Idx_t>
 * @param value - 设置值
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_SetUint8(gvUint8Idx_t idx, uint8_t value);


/**
 * @brief 设置Int8全局变量
 * @param idx   - 索引 参考<gvInt8Idx_t>
 * @param value - 设置值
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_SetInt8(gvInt8Idx_t idx, int8_t value);


/**
 * @brief 设置Uint16全局变量
 * @param idx   - 索引 参考<gvUint16Idx_t>
 * @param value - 设置值
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_SetUint16(gvUint16Idx_t idx, uint16_t value);


/**
 * @brief 设置Int16全局变量
 * @param idx   - 索引 参考<gvInt16Idx_t>
 * @param value - 设置值
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_SetInt16(gvInt16Idx_t idx, int16_t value);


/**
 * @brief 设置Uint32全局变量
 * @param idx   - 索引 参考<gvUint32Idx_t>
 * @param value - 设置值
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_SetUint32(gvUint32Idx_t idx, uint32_t value);


/**
 * @brief 设置Int32全局变量
 * @param idx   - 索引 参考<gvInt32Idx_t>
 * @param value - 设置值
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_SetInt32(gvInt32Idx_t idx, int32_t value);


/**
 * @brief 设置Float全局变量
 * @param idx   - 索引 参考<gvFloatIdx_t>
 * @param value - 设置值
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_SetFloat(gvFloatIdx_t idx, float value);


/**
 * @brief 设置Double全局变量
 * @param idx   - 索引 参考<gvDoubleIdx_t>
 * @param value - 设置值
 * @return 参考<gvErr_t>
 */
gvErr_t GlobalVariable_SetDouble(gvDoubleIdx_t idx, double value);




#endif
